Eesti

Süvaülevaade Saga mustrist hajutatud tehingute haldamiseks mikroteenuste arhitektuuris, käsitledes selle eeliseid, väljakutseid, rakendusstrateegiaid ja reaalseid näiteid.

Saga muster: hajutatud tehingute rakendamine mikroteenustes

Mikroteenuste maailmas võib andmete kooskõla säilitamine mitme teenuse vahel olla märkimisväärne väljakutse. Traditsioonilised ACID (aatomilisus, konsistentsus, isolatsioon, püsivus) tehingud, mida tavaliselt kasutatakse monoliitsetes rakendustes, ei sobi sageli hajutatud keskkondadesse. Siin tulebki appi Saga muster, mis pakub robustset lahendust hajutatud tehingute haldamiseks ja andmete terviklikkuse tagamiseks mikroteenuste vahel.

Mis on Saga muster?

Saga muster on disainimuster, mida kasutatakse kohalike tehingute jada haldamiseks mitme mikroteenuse vahel. See pakub viisi lõpliku kooskõla saavutamiseks, mis tähendab, et kuigi andmed võivad ajutiselt olla ebajärjekindlad, jõuavad need lõpuks järjepidevasse olekusse. Selle asemel, et tugineda ühele aatomilisele tehingule, mis hõlmab mitut teenust, jaotab Saga muster tehingu mitmeks väiksemaks iseseisvaks tehinguks, millest igaühe teostab üks teenus.

Iga kohalik tehing Saga sees uuendab ühe mikroteenuse andmebaasi. Kui üks tehingutest ebaõnnestub, käivitab Saga rea kompenseerivaid tehinguid, et tühistada eelnevate tehingute tehtud muudatused, võttes seega kogu operatsiooni tagasi.

Miks kasutada Saga mustrit?

Mitmed tegurid muudavad Saga mustri väärtuslikuks vahendiks tehingute haldamisel mikroteenuste arhitektuurides:

ACID vs. BASE

ACIDi ja BASE'i (Basically Available, Soft state, Eventually consistent) erinevuse mõistmine on Saga mustri kasutamise otsustamisel ülioluline.

Kaks peamist Saga rakendusstrateegiat

Saga mustri rakendamiseks on kaks peamist viisi: koreograafia ja orkestreerimine.

1. Koreograafiapõhine Saga

Koreograafiapõhises Sagas osaleb iga mikroteenus Sagas, kuulates teiste mikroteenuste avaldatud sündmusi ja reageerides vastavalt. Puudub keskne orkestraator; iga teenus teab oma kohustusi ja millal oma toiminguid sooritada.

Kuidas see töötab:

  1. Saga algab, kui mikroteenus avaldab sündmuse, mis tähistab tehingu algust.
  2. Teised mikroteenused tellivad selle sündmuse ja selle saamisel teostavad oma kohaliku tehingu.
  3. Pärast tehingu lõpuleviimist avaldab iga mikroteenus teise sündmuse, mis näitab selle toimingu õnnestumist või ebaõnnestumist.
  4. Teised mikroteenused kuulavad neid sündmusi ja võtavad vastavaid meetmeid, kas jätkates Saga järgmise sammuga või algatades kompenseerivaid tehinguid, kui ilmneb viga.

Näide: E-kaubanduse tellimuse esitamine (koreograafia)

  1. Tellimuste teenus: Saab uue tellimuse päringu ja avaldab `OrderCreated` sündmuse.
  2. Laoseisu teenus: Tellib `OrderCreated` sündmuse. Sündmuse saamisel kontrollib laoseisu. Kui piisav, reserveerib kaubad ja avaldab `InventoryReserved`. Kui ebapiisav, avaldab `InventoryReservationFailed`.
  3. Makseteenus: Tellib `InventoryReserved` sündmuse. Sündmuse saamisel töötleb makset. Kui õnnestub, avaldab `PaymentProcessed`. Kui ebaõnnestub, avaldab `PaymentFailed`.
  4. Tarneteenus: Tellib `PaymentProcessed` sündmuse. Sündmuse saamisel valmistab saadetise ette ja avaldab `ShipmentPrepared`.
  5. Tellimuste teenus: Tellib `ShipmentPrepared` sündmuse. Sündmuse saamisel märgib tellimuse lõpetatuks.
  6. Kompensatsioon: Kui avaldatakse `PaymentFailed` või `InventoryReservationFailed`, kuulavad teised teenused ja teostavad kompenseerivaid tehinguid (nt reserveeritud laoseisu vabastamine).

Koreograafia plussid:

Koreograafia miinused:

2. Orkestreerimispõhine Saga

Orkestreerimispõhises Sagas haldab keskne orkestraator (sageli rakendatud eraldi teenusena või olekumasinana) Sagat ja koordineerib osalevate mikroteenuste kohalike tehingute täitmist. Orkestraator ütleb igale teenusele, mida teha ja millal seda teha.

Kuidas see töötab:

  1. Saga algab, kui klient palub orkestraatoril tehingu algatada.
  2. Orkestraator saadab osalevatele mikroteenustele käske nende kohalike tehingute teostamiseks.
  3. Iga mikroteenus teostab oma tehingu ja teavitab orkestraatorit õnnestumisest või ebaõnnestumisest.
  4. Tulemuse põhjal otsustab orkestraator, kas minna edasi järgmise sammuga või algatada kompenseerivaid tehinguid.

Näide: E-kaubanduse tellimuse esitamine (orkestreerimine)

  1. Tellimuste orkestraator: Saab uue tellimuse päringu.
  2. Tellimuste orkestraator: Saadab laoseisu teenusele käsu kaupade reserveerimiseks.
  3. Laoseisu teenus: Reserveerib kaubad ja teavitab tellimuste orkestraatorit.
  4. Tellimuste orkestraator: Saadab makseteenusele käsu makse töötlemiseks.
  5. Makseteenus: Töötleb makse ja teavitab tellimuste orkestraatorit.
  6. Tellimuste orkestraator: Saadab tarneteenusele käsu saadetise ettevalmistamiseks.
  7. Tarneteenus: Valmistab saadetise ette ja teavitab tellimuste orkestraatorit.
  8. Tellimuste orkestraator: Märgib tellimuse lõpetatuks.
  9. Kompensatsioon: Kui mõni samm ebaõnnestub, saadab tellimuste orkestraator asjakohastele teenustele kompenseerivaid käske (nt reserveeritud laoseisu vabastamine).

Orkestreerimise plussid:

Orkestreerimise miinused:

Kompenseerivate tehingute rakendamine

Saga mustri oluline aspekt on kompenseerivate tehingute rakendamine. Need tehingud teostatakse ebaõnnestumise korral varem lõpule viidud tehingute mõju tühistamiseks. Eesmärk on viia süsteem tagasi järjepidevasse olekusse, isegi kui kogu Sagat ei saa lõpule viia.

Põhikaalutlused kompenseerivate tehingute puhul:

Näited kompenseerivatest tehingutest:

Väljakutsed ja kaalutlused

Kuigi Saga muster pakub olulisi eeliseid, esitab see ka mõningaid väljakutseid ja kaalutlusi:

Kasutusjuhud ja näited

Saga muster sobib hästi mitmesuguste kasutusjuhtude jaoks, eriti hajutatud süsteemides ja mikroteenuste arhitektuurides. Siin on mõned levinud näited:

Näide: Globaalne pangatehing

Kujutage ette stsenaariumi, mis hõlmab globaalset pangatehingut kahe erineva panga vahel, mis asuvad erinevates riikides ja alluvad erinevatele regulatsioonidele ja vastavuskontrollidele. Saga muster võib tagada, et tehing järgib määratletud samme:

  1. Tehingu algatamine: Klient algatab rahaülekande oma kontolt pangas A (asukoht USA-s) saaja kontole pangas B (asukoht Saksamaal).
  2. Pank A - Konto valideerimine: Pank A valideerib kliendi konto, kontrollib piisavate vahendite olemasolu ja tagab, et puuduvad piirangud.
  3. Vastavuskontroll (Pank A): Pank A teostab vastavuskontrolli, et tagada, et tehing ei rikuks rahapesu tõkestamise (AML) eeskirju ega rahvusvahelisi sanktsioone.
  4. Rahaülekanne (Pank A): Pank A debiteerib kliendi kontot ja saadab raha arvelduskojale või vahendajapangale.
  5. Arvelduskoja töötlemine: Arvelduskoda töötleb tehingu, teostab valuutavahetuse (USD -> EUR) ja suunab raha panka B.
  6. Pank B - Konto valideerimine: Pank B valideerib saaja konto ja tagab, et see on aktiivne ja sobilik raha vastuvõtmiseks.
  7. Vastavuskontroll (Pank B): Pank B teostab oma vastavuskontrolli, järgides Saksamaa ja EL-i regulatsioone.
  8. Konto krediteerimine (Pank B): Pank B krediteerib saaja kontot.
  9. Kinnitus: Pank B saadab kinnitusteate panka A, mis seejärel teavitab klienti tehingu lõpuleviimisest.

Kompenseerivad tehingud:

Tööriistad ja tehnoloogiad

Saga mustri rakendamisel võivad abiks olla mitmed tööriistad ja tehnoloogiad:

Parimad tavad Saga mustri rakendamiseks

Saga mustri tõhusaks rakendamiseks kaaluge järgmisi parimaid tavasid:

Kokkuvõte

Saga muster on võimas vahend hajutatud tehingute haldamiseks mikroteenuste arhitektuurides. Jaotades tehingud mitmeks väiksemaks iseseisvaks tehinguks ja pakkudes mehhanismi tõrgete kompenseerimiseks, võimaldab Saga muster säilitada andmete kooskõla ja ehitada vastupidavaid, skaleeritavaid ja lahtisidestatud süsteeme. Kuigi Saga mustri rakendamine võib olla keeruline, muudavad selle pakutavad eelised paindlikkuse, skaleeritavuse ja vastupidavuse osas selle väärtuslikuks varaks igas mikroteenuste arhitektuuris.

Saga mustri nüansside, koreograafia ja orkestreerimise vaheliste kompromisside ning kompenseerivate tehingute olulisuse mõistmine annab teile võime kavandada ja rakendada robustseid hajutatud süsteeme, mis vastavad tänapäeva keerukate ärikeskkondade nõudmistele. Saga mustri omaksvõtmine on samm tõeliselt vastupidavate ja skaleeritavate mikroteenuste arhitektuuride ehitamise suunas, mis suudavad enesekindlalt hakkama saada ka kõige keerukamate hajutatud tehingutega. Ärge unustage selle mustri rakendamisel arvestada oma konkreetsete vajaduste ja kontekstiga ning täiustage oma rakendust pidevalt reaalmaailma kogemuste ja tagasiside põhjal.

Saga muster: hajutatud tehingute rakendamine mikroteenustes | MLOG